package ar.edu.um.entidad;

// Generated Feb 2, 2014 7:21:27 PM by Hibernate Tools 3.4.0.CR1

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 * Usuario generated by hbm2java
 */
@Entity
@Table(name = "usuario", catalog = "canario")
@XmlRootElement(name = "usuario")
public class Usuario implements java.io.Serializable {

	private int idusuario;
	private TipoUsuario tipoUsuario;
	private String nombreUsuario;
	private String nombre;
	private String apellido;
	private String clave;
	private String foto;
	private String mail;
	private String descripcion;
	private Set<Usuario> usuariosSeguidos;
	private Set<Usuario> usuariosSeguidores;

	public Usuario() {
	}

	public Usuario(int idusuario, TipoUsuario tipoUsuario,
			String nombreUsuario, String nombre, String apellido, String clave,
			String mail, Set<Usuario> usuariosSeguidos, Set<Usuario> usuariosSeguidores) {
		this.idusuario = idusuario;
		this.tipoUsuario = tipoUsuario;
		this.nombreUsuario = nombreUsuario;
		this.nombre = nombre;
		this.apellido = apellido;
		this.clave = clave;
		this.mail = mail;
		this.usuariosSeguidos = usuariosSeguidos;
		this.usuariosSeguidores = usuariosSeguidores;
	}

	@Id
	@Column(name = "idusuario", unique = true, nullable = false)
	@XmlTransient
	public int getIdusuario() {
		return this.idusuario;
	}

	public void setIdusuario(int idusuario) {
		this.idusuario = idusuario;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "tipoUsuario", nullable = false)
	@XmlElement
	public TipoUsuario getTipoUsuario() {
		return this.tipoUsuario;
	}

	public void setTipoUsuario(TipoUsuario tipoUsuario) {
		this.tipoUsuario = tipoUsuario;
	}

	@Column(name = "nombreUsuario", nullable = false, length = 45)
	@XmlElement
	public String getNombreUsuario() {
		return this.nombreUsuario;
	}

	public void setNombreUsuario(String nombreUsuario) {
		this.nombreUsuario = nombreUsuario;
	}

	@Column(name = "nombre", nullable = false, length = 100)
	@XmlElement
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	@Column(name = "apellido", nullable = false, length = 100)
	@XmlElement
	public String getApellido() {
		return this.apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	@Column(name = "clave", nullable = false, length = 45)
	@XmlTransient
	public String getClave() {
		return this.clave;
	}

	public void setClave(String clave) {
		this.clave = clave;
	}

	@Column(name = "foto", length = 45)
	@XmlTransient
	public String getFoto() {
		return this.foto;
	}

	public void setFoto(String foto) {
		this.foto = foto;
	}

	@Column(name = "mail", nullable = false, length = 100)
	@XmlElement
	public String getMail() {
		return this.mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	@Column(name = "descripcion")
	@XmlTransient
	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	
	@OneToMany(fetch = FetchType.EAGER, mappedBy = "usuarioSeguidor")
	@XmlTransient
	public Set<Usuario> getUsuariosSeguidos() {
		return this.usuariosSeguidos;
	}

	public void setUsuariosSeguidos(Set<Usuario> usuariosSeguidos) {
		this.usuariosSeguidos = usuariosSeguidos;
	}
	
	@OneToMany(fetch = FetchType.EAGER, mappedBy = "usuarioSeguido")
	@XmlTransient
	public Set<Usuario> getUsuariosSeguidores() {
		return this.usuariosSeguidores;
	}

	public void setUsuariosSeguidores(Set<Usuario> usuariosSeguidores) {
		this.usuariosSeguidores = usuariosSeguidores;
	}
}
